{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bronze: Your First Step to Quantum Programming\n",
    "\n",
    "**Authors:** Abuzer Yakaryilmaz (QuSoft@Riga) | revised by Katrina Kizenbaha (Riga TechGirls) | Martins Kalis (QuSoft@Riga)\n",
    "\n",
    "\n",
    "### Testing: First Program \n",
    "\n",
    "There are two notebooks for testing your setup: \n",
    "\n",
    "Open the notebook [B02_cells_in_notebook.ipynb](bronze/B02_cells_in_notebook.ipynb). This is a very short tutorial on \"cells\" on Jupyter notebooks. Please read it, and complete the exercises at the end. \n",
    "\n",
    "Open the notebook [B04_hello_from_quantum_world.ipynb](bronze/B04_hello_from_quantum_world.ipynb). This is our test notebook for Qiskit. Please run each cell one by one. \n",
    "\n",
    "In this notebook, you may access IBM's simulator and prototype real quantum computer. If you would like to try them, then please read the following instructions:\n",
    "\n",
    "\n",
    "#### Joining the IBM Q Experience: \n",
    "In order to use IBM services, we should be a member of IBM Q Experience. \n",
    "- Click https://quantumexperience.ng.bluemix.net/qx/community \n",
    "- Click Sign In on the top-right corner to login into the system. If you are not a member, then first click Sign Up. \n",
    "\n",
    "After signing into the system, go to My Account by clicking the logo at the top-right corner and then My Account. \n",
    "- Click Advanced tabs, where you can copy your API key, which is used when connecting to IBM platforms. \n",
    "- Under Advanced tabs, you can also see IBM Q Backend Access (available to you, under maintenance, etc.) and your Units.\n",
    "\n",
    "If you are here, congratulations! Your system is ready for using Qiskit and Bronze ;-) \n",
    " \n",
    "### Python: Basics and Warm-Up \n",
    "There are nine notebooks on python programming. \n",
    "\n",
    "The first one ([B06_Python_Quick_Reference.ipynb](bronze/B06_Python_Quick_Reference.ipynb)) is prepared as a quick reference on python. \n",
    "\n",
    "The next four notebooks are on the basic usage of python: variables, loops, conditionals, and lists. \n",
    "- [B08_Python_Basics_Variables.ipynb](bronze/B08_Python_Basics_Variables.ipynb)\n",
    "<br>    *solutions:*  [`B08_Python_Basics_Variables_Solutions.ipynb`](bronze-solutions/B08_Python_Basics_Variables_Solutions.ipynb)\n",
    "- [B10_Python_Basics_Loops.ipynb](bronze/B10_Python_Basics_Loops.ipynb)\n",
    "<br>    *solutions:*  [`B10_Python_Basics_Loops_Solutions.ipynb`](bronze-solutions/B10_Python_Basics_Loops_Solutions.ipynb)\n",
    "- [B12_Python_Basics_Conditionals.ipynb](bronze/B12_Python_Basics_Conditionals.ipynb)\n",
    "<br>    *solutions:*  [`B12_Python_Basics_Conditionals_Solutions.ipynb`](bronze-solutions/B12_Python_Basics_Conditionals_Solutions.ipynb)\n",
    "- [B14_Python_Basics_Lists.ipynb](bronze/B14_Python_Basics_Lists.ipynb)\n",
    "<br>    *solutions:*  [`B14_Python_Basics_Lists_Solutions.ipynb`](bronze-solutions/B14_Python_Basics_Lists_Solutions.ipynb)\n",
    "\n",
    "The last four notebooks are prepared for warming you up to the main tutorial. You can practice double dimensional lists, and (double, triple, quadruple) nested loops in the contexts of vectors, matrices, and basic operations on them. \n",
    "- [B16_Lists_Vectors.ipynb](bronze/B16_Lists_Vectors.ipynb)\n",
    "<br>    *solutions:*  [`B16_Python_Lists_Vectors_Solutions.ipynb`](bronze-solutions/B16_Python_Lists_Vectors_Solutions.ipynb)\n",
    "- [B18_Lists_Inner_Product.ipynb](bronze/B18_Lists_Inner_Product.ipynb)\n",
    "<br>    *solutions:*  [`B18_Python_Lists_Inner_Product_Solutions.ipynb`](bronze-solutions/B18_Python_Lists_Inner_Product_Solutions.ipynb)\n",
    "- [B20_Lists_Matrices.ipynb](bronze/B20_Lists_Matrices.ipynb)\n",
    "<br>    *solutions:*  [`B20_Python_Lists_Matrices_Solutions.ipynb`](bronze-solutions/B20_Python_Lists_Matrices_Solutions.ipynb)\n",
    "- [B22_Lists_Tensor_Product.ipynb](bronze/B22_Lists_Tensor_Product.ipynb)\n",
    "<br>    *solutions:*  [`B22_Python_Lists_Tensor_Product_Solutions.ipynb`](bronze-solutions/B22_Python_Lists_Tensor_Product_Solutions.ipynb)\n",
    " \n",
    "### Bronze: Your First Step to Quantum Programming \n",
    "Bronze has sixteen notebooks for the main turorial:\n",
    "\n",
    "#### Basics of Probabilistic Computation:\n",
    "\n",
    "- [B24_One_Bit.ipynb](bronze/B24_One_Bit.ipynb)\n",
    "<br>    *solutions:*  [`B24_One_Bit_Solution.ipynb`](bronze-solutions/B24_One_Bit_Solution.ipynb)\n",
    "- [B26_Coin_Flip.ipynb](bronze/B26_Coin_Flip.ipynb)\n",
    "<br>    *solutions:*  [`B26_Coin_Flip_Solutions.ipynb`](bronze-solutions/B26_Coin_Flip_Solutions.ipynb)\n",
    "- [B28_Coin_Flip_Game.ipynb](bronze/B28_Coin_Flip_Game.ipynb)\n",
    "<br>    *solutions:*  [`B28_Coin_Flip_Game_Solution.ipynb`](bronze-solutions/B28_Coin_Flip_Game_Solution.ipynb)\n",
    "- [B32_Probabilistic_States.ipynb](bronze/B32_Probabilistic_States.ipynb)\n",
    "<br>    *solutions:*  [`B32_Probabilistic_States_Solutions.ipynb`](bronze-solutions/B32_Probabilistic_States_Solutions.ipynb)\n",
    "- [B36_Probabilistic_Operators.ipynb](bronze/B36_Probabilistic_Operators.ipynb)\n",
    "<br>    *solutions:*  [`B36_Probabilistic_Operators_Solutions.ipynb`](bronze-solutions/B36_Probabilistic_Operators_Solutions.ipynb)\n",
    "\n",
    "\n",
    "#### Basics of Quantum Computation:\n",
    "\n",
    "- [B40_Quantum_Coin_flipping.ipynb](bronze/B40_Quantum_Coin_flipping.ipynb)\n",
    "- [B42_Hadamard.ipynb](bronze/B42_Hadamard.ipynb)\n",
    "<br>    *solutions:*  [`B42_Hadamard_Solution.ipynb`](bronze-solutions/B42_Hadamard_Solution.ipynb)\n",
    "- [B44_One_Qubit.ipynb](bronze/B44_One_Qubit.ipynb)\n",
    "- [B46_Quantum_State.ipynb](bronze/B46_Quantum_State.ipynb)\n",
    "<br>    *solutions:*  [`B46_Quantum_State_Solutions.ipynb`](bronze-solutions/B46_Quantum_State_Solutions.ipynb)\n",
    "- [B48_Superposition.ipynb](bronze/B48_Superposition.ipynb)\n",
    "<br>    *solutions:*  [`B48_Superposition_Solutions.ipynb`](bronze-solutions/B48_Superposition_Solutions.ipynb)\n",
    "\n",
    "#### First Results on Quantum Computation with Qiskit:\n",
    "\n",
    "- [B56_Two_Qubits.ipynb](bronze/B56_Two_Qubits.ipynb)\n",
    "<br>    *solutions:*  [`B56_Two_Qubits_Solutions.ipynb`](bronze-solutions/B56_Two_Qubits_Solutions.ipynb)\n",
    "- [B60_Superdense_Coding.ipynb](bronze/B60_Superdense_Coding.ipynb)\n",
    "<br>    *solutions:*  [`B60_Superdense_Coding_Solution.ipynb`](bronze-solutions/B60_Superdense_Coding_Solution.ipynb)\n",
    "- [B64_Phase_Kickback.ipynb](bronze/B64_Phase_Kickback.ipynb)\n",
    "<br>    *solutions:*  [`B64_Phase_Kickback_Solutions.ipynb`](bronze-solutions/B64_Phase_Kickback_Solutions.ipynb)\n",
    "\n",
    "#### Rotations and Reflections on Unit Circle & Grover Algorithm\n",
    "\n",
    "- [B72_Rotations.ipynb](bronze/B72_Rotations.ipynb)\n",
    "- [B80_Reflections.ipynb](bronze/B80_Reflections.ipynb)\n",
    "- [B88_Grovers_Search.ipynb](bronze/B88_Grovers_Search.ipynb)\n",
    "<br>    *solutions:*  [`B88_Grovers_Search_Solutions.ipynb`](bronze-solutions/B88_Grovers_Search_Solutions.ipynb) \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "from os import listdir as ld\n",
    "files = [ff for ff in ld('bronze') if ff[:1] == 'B']\n",
    "sols = [ff for ff in ld('bronze-solutions') if ff[:1] == 'B']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "files.sort()\n",
    "sols.sort()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "- [B01_ Acknowledgements.ipynb](bronze/B01_ Acknowledgements.ipynb)\n",
      "- [B02_cells_in_notebook.ipynb](bronze/B02_cells_in_notebook.ipynb)\n",
      "- [B04_hello_from_quantum_world.ipynb](bronze/B04_hello_from_quantum_world.ipynb)\n",
      "- [B06_Python_Quick_Reference.ipynb](bronze/B06_Python_Quick_Reference.ipynb)\n",
      "- [B08_Python_Basics_Variables.ipynb](bronze/B08_Python_Basics_Variables.ipynb)\n",
      "<br>    *solutions:*  [`B08_Python_Basics_Variables_Solutions.ipynb`](bronze-solutions/B08_Python_Basics_Variables_Solutions.ipynb)\n",
      "- [B10_Python_Basics_Loops.ipynb](bronze/B10_Python_Basics_Loops.ipynb)\n",
      "<br>    *solutions:*  [`B10_Python_Basics_Loops_Solutions.ipynb`](bronze-solutions/B10_Python_Basics_Loops_Solutions.ipynb)\n",
      "- [B12_Python_Basics_Conditionals.ipynb](bronze/B12_Python_Basics_Conditionals.ipynb)\n",
      "<br>    *solutions:*  [`B12_Python_Basics_Conditionals_Solutions.ipynb`](bronze-solutions/B12_Python_Basics_Conditionals_Solutions.ipynb)\n",
      "- [B14_Python_Basics_Lists.ipynb](bronze/B14_Python_Basics_Lists.ipynb)\n",
      "<br>    *solutions:*  [`B14_Python_Basics_Lists_Solutions.ipynb`](bronze-solutions/B14_Python_Basics_Lists_Solutions.ipynb)\n",
      "- [B16_Lists_Vectors.ipynb](bronze/B16_Lists_Vectors.ipynb)\n",
      "<br>    *solutions:*  [`B16_Python_Lists_Vectors_Solutions.ipynb`](bronze-solutions/B16_Python_Lists_Vectors_Solutions.ipynb)\n",
      "- [B18_Lists_Inner_Product.ipynb](bronze/B18_Lists_Inner_Product.ipynb)\n",
      "<br>    *solutions:*  [`B18_Python_Lists_Inner_Product_Solutions.ipynb`](bronze-solutions/B18_Python_Lists_Inner_Product_Solutions.ipynb)\n",
      "- [B20_Lists_Matrices.ipynb](bronze/B20_Lists_Matrices.ipynb)\n",
      "<br>    *solutions:*  [`B20_Python_Lists_Matrices_Solutions.ipynb`](bronze-solutions/B20_Python_Lists_Matrices_Solutions.ipynb)\n",
      "- [B22_Lists_Tensor_Product.ipynb](bronze/B22_Lists_Tensor_Product.ipynb)\n",
      "<br>    *solutions:*  [`B22_Python_Lists_Tensor_Product_Solutions.ipynb`](bronze-solutions/B22_Python_Lists_Tensor_Product_Solutions.ipynb)\n",
      "- [B24_One_Bit.ipynb](bronze/B24_One_Bit.ipynb)\n",
      "<br>    *solutions:*  [`B24_One_Bit_Solution.ipynb`](bronze-solutions/B24_One_Bit_Solution.ipynb)\n",
      "- [B26_Coin_Flip.ipynb](bronze/B26_Coin_Flip.ipynb)\n",
      "<br>    *solutions:*  [`B26_Coin_Flip_Solutions.ipynb`](bronze-solutions/B26_Coin_Flip_Solutions.ipynb)\n",
      "- [B28_Coin_Flip_Game.ipynb](bronze/B28_Coin_Flip_Game.ipynb)\n",
      "<br>    *solutions:*  [`B28_Coin_Flip_Game_Solution.ipynb`](bronze-solutions/B28_Coin_Flip_Game_Solution.ipynb)\n",
      "- [B32_Probabilistic_States.ipynb](bronze/B32_Probabilistic_States.ipynb)\n",
      "<br>    *solutions:*  [`B32_Probabilistic_States_Solutions.ipynb`](bronze-solutions/B32_Probabilistic_States_Solutions.ipynb)\n",
      "- [B36_Probabilistic_Operators.ipynb](bronze/B36_Probabilistic_Operators.ipynb)\n",
      "<br>    *solutions:*  [`B36_Probabilistic_Operators_Solutions.ipynb`](bronze-solutions/B36_Probabilistic_Operators_Solutions.ipynb)\n",
      "- [B40_Quantum_Coin_flipping.ipynb](bronze/B40_Quantum_Coin_flipping.ipynb)\n",
      "- [B42_Hadamard.ipynb](bronze/B42_Hadamard.ipynb)\n",
      "<br>    *solutions:*  [`B42_Hadamard_Solution.ipynb`](bronze-solutions/B42_Hadamard_Solution.ipynb)\n",
      "- [B44_One_Qubit.ipynb](bronze/B44_One_Qubit.ipynb)\n",
      "- [B46_Quantum_State.ipynb](bronze/B46_Quantum_State.ipynb)\n",
      "<br>    *solutions:*  [`B46_Quantum_State_Solutions.ipynb`](bronze-solutions/B46_Quantum_State_Solutions.ipynb)\n",
      "- [B48_Superposition.ipynb](bronze/B48_Superposition.ipynb)\n",
      "<br>    *solutions:*  [`B48_Superposition_Solutions.ipynb`](bronze-solutions/B48_Superposition_Solutions.ipynb)\n",
      "- [B56_Two_Qubits.ipynb](bronze/B56_Two_Qubits.ipynb)\n",
      "<br>    *solutions:*  [`B56_Two_Qubits_Solutions.ipynb`](bronze-solutions/B56_Two_Qubits_Solutions.ipynb)\n",
      "- [B60_Superdense_Coding.ipynb](bronze/B60_Superdense_Coding.ipynb)\n",
      "<br>    *solutions:*  [`B60_Superdense_Coding_Solution.ipynb`](bronze-solutions/B60_Superdense_Coding_Solution.ipynb)\n",
      "- [B64_Phase_Kickback.ipynb](bronze/B64_Phase_Kickback.ipynb)\n",
      "<br>    *solutions:*  [`B64_Phase_Kickback_Solutions.ipynb`](bronze-solutions/B64_Phase_Kickback_Solutions.ipynb)\n",
      "- [B72_Rotations.ipynb](bronze/B72_Rotations.ipynb)\n",
      "- [B80_Reflections.ipynb](bronze/B80_Reflections.ipynb)\n",
      "- [B88_Grovers_Search.ipynb](bronze/B88_Grovers_Search.ipynb)\n",
      "<br>    *solutions:*  [`B88_Grovers_Search_Solutions.ipynb`](bronze-solutions/B88_Grovers_Search_Solutions.ipynb)\n"
     ]
    }
   ],
   "source": [
    "for ss in files:\n",
    "    print('- ['+ss+'](bronze/'+ss+')')\n",
    "    tt = [ff for ff in sols if ff[:3]==ss[:3]]\n",
    "    if len(tt) > 0:\n",
    "        print('<br>    *solutions:*  [`'+tt[0]+'`](bronze-solutions/'+tt[0]+')')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
